package threads;

import componentes.Cliente;
import excessoes.clienteException.ExecutarComandoLinuxException;
import excessoes.clienteException.IpSemForwardException;
import excessoes.clienteException.MacSemForwardException;
import excessoes.clienteException.RecebeuLetrasException;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import principal.Main;

/**
 *
 * @author Wagner Tavares
 */
public class TentaBloquearTodos extends Thread {
    private Hashtable<String,Cliente> clientes;
    public TentaBloquearTodos(Hashtable<String,Cliente> clientes){
        this.clientes = clientes;
    }
    @Override
    public void run(){
        Logger.getLogger(Main.class.getName()).logp(Level.INFO, TentaBloquearTodos.class.getName(), "run()","A rotina bloqueou a todos que estavam sem trafego");
        Collection c = clientes.values();
        for (Iterator it = c.iterator();it.hasNext();){
            Cliente cliente = (Cliente)it.next();
            SubThread bloqueiaUm = new SubThread(cliente);
            bloqueiaUm.start();
            /*try {

                cliente.tentaBloquear(true);

            } catch (ExecutarComandoLinuxException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.SEVERE, TentaBloquearTodos.class.getName(),"run()","Erro ao executar um comando linux: "+ex.getComando(), ex);
            } catch (IpSemForwardException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.WARNING, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+": "+ex.getIp());
            } catch (MacSemForwardException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.WARNING, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+": "+ex.getMac());
            } catch (RecebeuLetrasException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.SEVERE, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+" | "+ex.getArrayProblema().toString());
            }*/
        }
        Main.serializar();
    }
    
    private class SubThread extends Thread {
        private Cliente cliente;
        public SubThread(Cliente cliente){
            this.cliente = cliente;
        }
        @Override
        public void run(){
            try {

                cliente.tentaBloquear(true);

            } catch (ExecutarComandoLinuxException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.SEVERE, TentaBloquearTodos.class.getName(),"run()","Erro ao executar um comando linux: "+ex.getComando(), ex);
            } catch (IpSemForwardException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.WARNING, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+": "+ex.getIp());
            } catch (MacSemForwardException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.WARNING, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+": "+ex.getMac());
            } catch (RecebeuLetrasException ex) {
                Logger.getLogger(Main.class.getName()).logp(Level.SEVERE, TentaBloquearTodos.class.getName(),"run()",ex.getMessage()+" | "+ex.getArrayProblema().toString());
            }
        }
    }
}
